package KontrolLag;
import ModelLag.*;
import java.lang.Exception.*;
import java.util.ArrayList;

/**
 * Klasse som styrer alt hvad der har med objekter af typen Vare at goere.
 */
public class VareCtr
{
    private VareContainer vareContainer;
    private static VareCtr instance;
    private PersonCtr personCtr;

    /**
     * Construktor til klasse VareCtr
     */
    private VareCtr()
    {
        vareContainer = VareContainer.getInstance();
        personCtr = PersonCtr.getInstance();

    }

    /**
     * singleton
     */
    public static VareCtr getInstance()
    {
        if(instance == null)
        {
            instance = new VareCtr();
        }
        return instance;
    }

    /**
     * metode som opretter en Vare med dets parametre
     * @param beskrivelse, eanNr, bestilNr, indkoebsPris, lokation, minLager, maxLager, antal, tlfNr
     */

    public void opretVare(String beskrivelse, String eanNr, String bestilNr, long indkoebsPris, long salgsPris, String lokation, long minLager, long maxLager, long antal, String tlfNr) throws Exception
    {
        try
        {
            Vare v = findVare(eanNr);
            if(v != null)
            {
                throw new Exception("Det ean nummer eksistere allerede paa en varer");
            }
            else
            {
                v = new Vare(beskrivelse, eanNr, bestilNr, indkoebsPris, salgsPris, lokation, minLager, maxLager, antal, findLeverandoer(tlfNr));
                vareContainer.tilfoejVare(v);
            }
        }
        catch(IndexOutOfBoundsException i)
        {
            Vare v = new Vare(beskrivelse, eanNr, bestilNr, indkoebsPris, salgsPris, lokation, minLager, maxLager, antal, findLeverandoer(tlfNr));
            vareContainer.tilfoejVare(v);
        }
    }

    /**
     * metode som finder en Vare ud fra et givent eanNr og retunerer dette
     * @param eanNr
     * @returns Vare 
     */
    public Vare findVare(String eanNr)
    {
        return vareContainer.findVare(eanNr);
    }

    public void sletVare(String eanNr)
    {
        vareContainer.sletVare(eanNr);
    }

    /**
     * metode som finder en leverandoer ud fra et tlfNr.
     * @param tlfNr
     * @returns Leverandoer objekt, hvis det der er fundet er en Leverandoer. Ellers smides der en exception og der retuneres intet.
     */
    public Person findLeverandoer(String tlfNr)throws IllegalStateException
    {
        Person l = personCtr.findPerson(tlfNr);
        if(l.getType() != "Leverandoer")
        {
            throw new IllegalStateException("Telefon nummeret tilhoerer ikke en leverandoer");
        }
        else
        {
            return l;
        }
    }

    /**
     * metode som tjekker om nogle varer er under minimumsbeholdningen. Hvis de er, udskrives disse.
     */
    public void lagerCheck()throws Exception
    {
        vareContainer.lagerCheck();
    }

    /**
     * metode som tjekker om nogle varer er under minimumsbeholdningen. Hvis de er, returnres disse i en liste.
     * @returns ArrayList med Vare som er under minimumsbeholdning.
     */
    public ArrayList<Vare> tjekHeleLager()
    {
        return vareContainer.tjekHeleLager();
    }

}
